home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Reference Guide / C-C++ Interactive Reference Guide.iso / c_ref / csource3 / 106_01 / bioslb.prn < prev    next >
Encoding:
Text File  |  1980-07-09  |  9.0 KB  |  177 lines

  1. BIOSLB Routine to interface 'C' to 'BIOS'    MACRO-80 3.31    29-Jun-79    PAGE    1
  2.  
  3.  
  4.     1                                        TITLE    BIOSLB Routine to interface 'C' to 'BIOS'
  5.     2                                        ;
  6.     3                                        ;
  7.     4                                        ;    Anyone may use this (or not as they please)
  8.     5                                        ;    for whatever purpose they wish
  9.     6                                        ;    H.R.Moran Jr. 1/31/80
  10.     7                                        ;
  11.     8                                        ;++ **************************************************
  12.     9                                        ;
  13.    10                                        ; TO USE THIS ROUTINE:
  14.    11                                        ;
  15.    12                                        ;    M80 BIOSLB,BIOSLB=BIOSLB    ...Microsoft 'M80'
  16.    13                                        ;    L80 BIOSYB,BIOSLB/N/E        ...Microsoft 'L80'
  17.    14                                        ;    REN BIOS.CRL=BIOS.COM
  18.    15                                        ;
  19.    16                                        ;    BIOS.CRL WILL BE A 'BDS C' COMPATIBLE RELOCATABLE FILE
  20.    17                                        ;    WHICH CAN BE REQUESTED AT CLINK OR INTEGRATED
  21.    18                                        ;    INTO YOUR LIBRARY WITH CLIB
  22.    19                                        ;
  23.    20                                        ;    'BDS C' calling sequence samples
  24.    21                                        ;
  25.    22                                        ;#define WARMBOOT 0
  26.    23                                        ;#define CONST 1
  27.    24                                        ;#define CONIN 2
  28.    25                                        ;#define CONOUT 3
  29.    26                                        ;#define LIST 4
  30.    27                                        ;#define PUNCH 5
  31.    28                                        ;#define READER 6
  32.    29                                        ;#define HOME 7
  33.    30                                        ;#define SELECT_DISK 8
  34.    31                                        ;#define SET_TRACK 9
  35.    32                                        ;#define SET_SECTOR 10
  36.    33                                        ;#define SET_DMA 11
  37.    34                                        ;#define READ_SECTOR 12
  38.    35                                        ;#define WRITE_SECTOR 13
  39.    36                                        ;
  40.    37                                        ;
  41.    38                                        ;char *dma_address;
  42.    39                                        ;char c;
  43.    40                                        ;int bios();  /* both B and C regs are loaded from 2'nd param */
  44.    41                                        ;          /*            A reg  is  returned as fn value */
  45.    42                                        ;int track,sector;
  46.    43                                        ;    .
  47.    44                                        ;    .
  48.    45                                        ;    .
  49.    46                                        ;  bios(SELECT_DISK,disk-'A');
  50. BIOSLB Routine to interface 'C' to 'BIOS'    MACRO-80 3.31    29-Jun-79    PAGE    1-1
  51.  
  52.  
  53.    47                                        ;  bios(SET_TRACK,track);
  54.    48                                        ;  bios(SET_SECTOR,sector);
  55.    49                                        ;  bios(SET_DMA,dma_address);
  56.    50                                        ;
  57.    51                                        ;
  58.    52                                        ;    if( (c=bios(READ_SECTOR,DUMMY_ARGUMENT)) != 0 )
  59.    53                                        ;      exit(puts("\nError in reading absolute sector"));
  60.    54                                        ;    .
  61.    55                                        ;    .
  62.    56                                        ;    .
  63.    57                                        ;
  64.    58                                        ;    while(1) {
  65.    59                                        ;      if( (c=bios(CONST,DUMMY_PARAMETER) )    /* keystruck */
  66.    60                                        ;        break;
  67.    61                                        ;      .
  68.    62                                        ;      .
  69.    63                                        ;      .
  70.    64                                        ;      } /* end while */
  71.    65                                        ;    c = bios(CONIN,DUMMY_PARAMETER);    /* get the char */
  72.    66                                        ;    if( c >= ' ' )                /* it is visable */
  73.    67                                        ;      bios(CONOUT,c);
  74.    68                                        ;    else {            /* make it visable */
  75.    69                                        ;      bios(CONOUT,'^');
  76.    70                                        ;      bios(CONOUT,c +'A');
  77.    71                                        ;      }
  78.    72                                        ;
  79.    73                                        ;
  80.    74                                        ;
  81.    75                                        ;-- **************************************************
  82.    76                                        ;
  83.    77      03F7                          MAGIC    EQU    3F7H        ;'BDS C' PARAMETER PASSING BUFFER
  84.    78                                        ;
  85.    79      0000'                             ASEG
  86.    80                                        ORG    100H
  87.    81                                        .PHASE    0
  88.    82                                        ;
  89.    83      0000    42 49 4F D3           ZERO:    DC    'BIOS'        ;MODULE NAME
  90.    84      0004    0205                      DW    BIOSHEAD    ;LOCATION OF LABEL 'BIOSHEAD' IN FILE
  91.    85      0006    80                        DB    80H        ;END OF DIRECTORY ENTRIES
  92.    86      0007    022A                      DW    FINIS - 100H    ;POINTER TO NEXT AVAIL LOCATION IN FILE
  93.    87      0009                              DS    (512 -($-ZERO))    ;PAD REST OF DIRECTORY
  94.    88      0200                              DS    5        ;RESERVED FOR 'CLIB'
  95.    89                                        ;
  96.    90                                        .DEPHASE
  97.    91                                        ;
  98.    92                                        PAGE
  99. BIOSLB Routine to interface 'C' to 'BIOS'    MACRO-80 3.31    29-Jun-79    PAGE    1-2
  100.  
  101.  
  102.    93      0305                          
  103.    94                                        ;
  104.    95                                        ; THE BIOS() CODE HEADER ENTRY
  105.    96                                        ;
  106.    97                                        .PHASE    $-100H
  107.    98                                        ;
  108.    99                                    BIOSHEAD:
  109.   100      0205    00                        DB    0        ;NO EXTERNAL 'BDS C' ROUTINES NEEDED
  110.   101      0206    001E                      DW    BIOSSTOP-BIOS    ;LENGTH OF THIS ROUTINE
  111.   102                                        ;
  112.   103                                        .DEPHASE
  113.   104                                        ;
  114.   105                                        ; THE BODY OF BIOS()
  115.   106                                        ;
  116.   107                                        .PHASE    0
  117.   108                                        ;
  118.   109      0000    C5                    BIOS:    PUSH    B        ;SAVE TH 'BDS C' STACK POINTER
  119.   110      0001    21 0019                   LXI    H,BIOSBACK    ;INTERMEDIATE RETURN ADRESS
  120.   111      0004    E5                        PUSH    H        ;STACK IT
  121.   112      0005    2A 03F9                   LHLD    MAGIC + 2    ;HL = PARAMETER TO PASS TO BIOS
  122.   113      0008    44                        MOV    B,H
  123.   114      0009    4D                        MOV    C,L        ;BC = PARAMETER TO PASS TO BIOS
  124.   115      000A    3A 03F7                   LDA    MAGIC        ; A = FUNCTION NUMBER
  125.   116      000D    57                        MOV    D,A
  126.   117      000E    87                        ADD    A
  127.   118      000F    82                        ADD    D        ; A = (FUNCTION NUMBER)*3
  128.   119      0010    2A 0001                   LHLD    1        ; HL = .(BIOS JUMP TABLE)
  129.   120      0013    85                        ADD    L
  130.   121      0014    6F                        MOV    L,A
  131.   122      0015    8C                        ADC    H
  132.   123      0016    95                        SUB    L
  133.   124      0017    67                        MOV    H,A        ; HL = (BIOS JUMP TABLE)[FUNCTION NUMBER]
  134.   125      0018    E9                        PCHL            ; GO TO BIOS ROUTINE, RETURN TO 'BIOSBACK'
  135.   126                                        ;
  136.   127                                    BIOSBACK:
  137.   128      0019    26 00                     MVI    H,0
  138.   129      001B    6F                        MOV    L,A
  139.   130      001C    C1                        POP    B        ;RESTORE THE 'BDS C' STACK POINTER
  140.   131      001D    C9                        RET            ;TO THE 'BDS C' ROUTINE WHICH INVOKED 'BIOS'
  141.   132                                        ;
  142.   133                                    BIOSSTOP:
  143.   134                                        ;
  144.   135                                        ; RELOCATION PARAMETERS
  145.   136                                        ;
  146.   137      001E    0001                      DW    1            ;NUMBER OF NEEDED RELOCATION PARAMS
  147. BIOSLB Routine to interface 'C' to 'BIOS'    MACRO-80 3.31    29-Jun-79    PAGE    1-3
  148.  
  149.  
  150.   138      0020    0002                      DW    BIOS + 2        ;POINTER TO ADDRESS NEEDING RELOC
  151.   139                                        .DEPHASE
  152.   140                                    FINIS:    END    ZERO
  153. BIOSLB Routine to interface 'C' to 'BIOS'    MACRO-80 3.31    29-Jun-79    PAGE    S
  154.  
  155.  
  156. Macros:
  157.  
  158. Symbols:
  159. BIOS    0000     BIOSBA    0019     BIOSHE    0205     BIOSST    001E 
  160. FINIS    032A     MAGIC    03F7     ZERO    0000     
  161.  
  162.  
  163.  
  164. No  Fatal error(s)
  165.  
  166.  
  167.  
  168. BIOS      101      109#      138
  169. BIOSBA      110      127#
  170. BIOSHE       84       99#
  171. BIOSST      101      133#
  172. FINIS       86      140#
  173. MAGIC       77#      112      115
  174. ZERO       83#       87      140
  175.  
  176.  ADDRESS NEEDING RELOC
  177.   139